using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.Alf.Site.Entidades;
using MakeIT.Alf.Site.Negocios;

namespace MakeIT.Alf.Site.Apresentacao
{
	public partial class CadastroPessoa : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;

		protected void Page_Load(object sender, EventArgs e)
		{
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);

                atualizarDdlEstado(null, null);
                atualizarDdlLogtipo(null, null);
            }

		}

        protected void atualizarDdlEstado(object sender, ImageClickEventArgs e)
        {
            List<EstadoVO> idEstadoCadVOs = new List<EstadoVO>();
            EstadoVO idEstadoCadVO = EstadoVO.CreateVO();
            idEstadoCadVO.idEstado = -1;
            idEstadoCadVO.estado = "";
            idEstadoCadVOs.Add(idEstadoCadVO);
            idEstadoCadVOs.AddRange(AlfDAO.getEstados());
            Util.CarregarCombo(this.ddlCadEstado, idEstadoCadVOs);

            ddlCadEstado_SelectedIndexChanged(null, null);
        }

        protected void atualizarDdlCidade(object sender, ImageClickEventArgs e)
        {
            List<CidadeVO> idCidadeVOs = new List<CidadeVO>();
            CidadeVO idCidadeVO = CidadeVO.CreateVO();
            idCidadeVO.idCidade = -1;
            idCidadeVO.cidade = "";
            idCidadeVOs.Add(idCidadeVO);
            if (!string.IsNullOrEmpty(ddlCadEstado.SelectedValue) && !ddlCadEstado.SelectedValue.Equals("-1"))
            {
                idCidadeVOs.AddRange(AlfDAO.getCidades(null, null, int.Parse(ddlCadEstado.SelectedValue)));
            }
            Util.CarregarCombo(this.ddlCadCidade, idCidadeVOs);

            ddlCadCidade_SelectedIndexChanged(null, null);
        }

        protected void atualizarDdlBairro(object sender, ImageClickEventArgs e)
        {
            List<BairroVO> idBairroCadVOs = new List<BairroVO>();
            BairroVO idBairroCadVO = BairroVO.CreateVO();
            idBairroCadVO.idBairro = -1;
            idBairroCadVO.bairro = "";
            idBairroCadVOs.Add(idBairroCadVO);
            if (!string.IsNullOrEmpty(ddlCadCidade.SelectedValue) && !ddlCadCidade.SelectedValue.Equals("-1"))
            {
                idBairroCadVOs.AddRange(AlfDAO.getBairros(null, null, int.Parse(ddlCadCidade.SelectedValue)));
            }
            Util.CarregarCombo(this.ddlCadBairro, idBairroCadVOs);

            ddlCadBairro_SelectedIndexChanged(null, null);
        }

        protected void atualizarDdlLogtipo(object sender, ImageClickEventArgs e)
        {
            List<LogtipoVO> idLogtipoCadVOs = new List<LogtipoVO>();
            idLogtipoCadVOs.AddRange(AlfDAO.getLogtipos());
            Util.CarregarCombo(this.ddlCadIdTipoLog, idLogtipoCadVOs);

            ddlCadIdTipoLog_SelectedIndexChanged(null, null);
        }

        protected void atualizarDdlLogradouro(object sender, ImageClickEventArgs e)
        {
            CarregaLogradouro();
            ddlCadIdLogradouro_SelectedIndexChanged(null, null);
        }

        
        /// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			PessoaVO pessoaVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdPessoa.Text))
				{
					pessoaVO = PessoaVO.CreateVO();
					pessoaVO.cadastro = DateTime.Now;
					pessoaVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					pessoaVO = AlfDAO.getPessoa(Int32.Parse(this.txtCadIdPessoa.Text));
				}

				if(string.IsNullOrEmpty(this.txtCadCPF.Text))
					pessoaVO.cPF = null;
				else
					pessoaVO.cPF = this.txtCadCPF.Text;
				if(string.IsNullOrEmpty(this.txtCadCNPJ.Text))
					pessoaVO.cNPJ = null;
				else
					pessoaVO.cNPJ = this.txtCadCNPJ.Text;
				if(string.IsNullOrEmpty(this.txtCadIE.Text))
					pessoaVO.iE = null;
				else
					pessoaVO.iE = this.txtCadIE.Text;
				if(string.IsNullOrEmpty(this.txtCadIM.Text))
					pessoaVO.iM = null;
				else
					pessoaVO.iM = this.txtCadIM.Text;
				pessoaVO.nome = this.txtCadNome.Text;
				pessoaVO.idLogradouro = Int32.Parse(this.ddlCadIdLogradouro.SelectedValue);
				pessoaVO.endNum = this.txtCadEndNum.Text;
				if(string.IsNullOrEmpty(this.txtCadEndCom.Text))
					pessoaVO.endCom = null;
				else
					pessoaVO.endCom = this.txtCadEndCom.Text;
				if(string.IsNullOrEmpty(this.txtCadEmail.Text))
					pessoaVO.email = null;
				else
					pessoaVO.email = this.txtCadEmail.Text;
				if(string.IsNullOrEmpty(this.txtCadFone1.Text))
					pessoaVO.fone1 = null;
				else
					pessoaVO.fone1 = this.txtCadFone1.Text;
				if(string.IsNullOrEmpty(this.txtCadFone2.Text))
					pessoaVO.fone2 = null;
				else
					pessoaVO.fone2 = this.txtCadFone2.Text;
				if(string.IsNullOrEmpty(this.txtCadFone3.Text))
					pessoaVO.fone3 = null;
				else
					pessoaVO.fone3 = this.txtCadFone3.Text;
				if(string.IsNullOrEmpty(this.txtCadContato.Text))
					pessoaVO.contato = null;
				else
					pessoaVO.contato = this.txtCadContato.Text;
				if(string.IsNullOrEmpty(this.txtCadResponsavel.Text))
					pessoaVO.responsavel = null;
				else
					pessoaVO.responsavel = this.txtCadResponsavel.Text;
				pessoaVO.edicao = DateTime.Now;
				pessoaVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					pessoaVO.idPessoa = (int)AlfDAO.newPessoa(pessoaVO);
				else
					AlfDAO.setPessoa(pessoaVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdPessoa.Text = pessoaVO.idPessoa.ToString();
				this.ltCadastradoPor.Text = pessoaVO.cadastradoPor;
				this.ltEditadoPor.Text = pessoaVO.editadoPor;
				this.ltDataCadastro.Text = pessoaVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = pessoaVO.edicao.ToString("dd/MM/yyyy");

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idPessoa = null;
			string cPF = null;
			string cNPJ = null;
			string nome = null;
			string contato = null;
			string responsavel = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdPessoa.Text))
				{
					idPessoa = Int32.Parse(this.txtIdPessoa.Text);
				}

				if (!string.IsNullOrEmpty(this.txtCPF.Text))
				{
					cPF = this.txtCPF.Text;
				}

				if (!string.IsNullOrEmpty(this.txtCNPJ.Text))
				{
					cNPJ = this.txtCNPJ.Text;
				}

				if (!string.IsNullOrEmpty(this.txtNome.Text))
				{
					nome = this.txtNome.Text;
				}

				if (!string.IsNullOrEmpty(this.txtContato.Text))
				{
					contato = this.txtContato.Text;
				}

				if (!string.IsNullOrEmpty(this.txtResponsavel.Text))
				{
					responsavel = this.txtResponsavel.Text;
				}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = AlfDAO.getPessoas(idPessoa, nome, null, cPF, cNPJ, contato, responsavel);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabPessoa.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdPessoa.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdPessoa.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			PessoaVO pessoaVO = null;
			int idPessoa = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idPessoa = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				pessoaVO = AlfDAO.getPessoa(idPessoa);

				this.txtCadIdPessoa.Text = pessoaVO.idPessoa.ToString();
				this.txtCadCPF.Text = pessoaVO.cPF;
				this.txtCadCNPJ.Text = pessoaVO.cNPJ;
				this.txtCadIE.Text = pessoaVO.iE;
				this.txtCadIM.Text = pessoaVO.iM;
				this.txtCadNome.Text = pessoaVO.nome;

                buscaLogradouro(pessoaVO.idLogradouro);
                this.txtCadEndNum.Text = pessoaVO.endNum;
				this.txtCadEndCom.Text = pessoaVO.endCom;
				this.txtCadEmail.Text = pessoaVO.email;
				this.txtCadFone1.Text = pessoaVO.fone1;
				this.txtCadFone2.Text = pessoaVO.fone2;
				this.txtCadFone3.Text = pessoaVO.fone3;
				this.txtCadContato.Text = pessoaVO.contato;
				this.txtCadResponsavel.Text = pessoaVO.responsavel;
				this.ltCadastradoPor.Text = pessoaVO.cadastradoPor;
				this.ltEditadoPor.Text = pessoaVO.editadoPor;
				this.ltDataCadastro.Text = pessoaVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = pessoaVO.edicao.ToString("dd/MM/yyyy");

				//Habilita tab page do cadastro
				this.tabPessoa.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);
            this.txtCadCep.Enabled = false;

			// Trava apenas os text box da PK
			this.txtCadIdPessoa.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;


			this.txtCadNome.Focus();
		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);
            this.txtCadCep.Enabled = false;

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Trava apenas os text box da PK
			this.txtCadIdPessoa.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadNome.Focus();

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			PessoaVO pessoaVO = null;

			try
			{
				//Cria objeto
				pessoaVO = PessoaVO.CreateVO();
				pessoaVO.idPessoa = Int32.Parse(this.txtCadIdPessoa.Text);

				//verifica se tem imovel dependentes deste registro
				if (AlfDAO.getCountImovelxIdPromotor(pessoaVO.idPessoa) > 0)
				{
					Util.ExibeAlert(this, "Há Imóvel(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				//verifica se tem imovel dependentes deste registro
				if (AlfDAO.getCountImovelxIdIndicador(pessoaVO.idPessoa) > 0)
				{
					Util.ExibeAlert(this, "Há Imóvel(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				//verifica se tem imovel dependentes deste registro
				if (AlfDAO.getCountImovelxIdCliente(pessoaVO.idPessoa) > 0)
				{
					Util.ExibeAlert(this, "Há Imóvel(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				//Chama metodo para excluir registro
				AlfDAO.delPessoa(pessoaVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);
				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}


        protected void ddlCadEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlCidade(null, null);
        }

        protected void ddlCadCidade_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlBairro(null, null);
        }

        protected void ddlCadBairro_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlLogtipo(null, null);
        }

        protected void ddlCadIdTipoLog_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlLogradouro(null, null);
        }

        protected void CarregaLogradouro()
        {
            List<LogradouroVO> idLogradouroCadVOs = new List<LogradouroVO>();
            LogradouroVO idLogradouroCadVO = LogradouroVO.CreateVO();
            idLogradouroCadVO.idLogradouro = -1;
            idLogradouroCadVO.logradouro = "";
            idLogradouroCadVOs.Add(idLogradouroCadVO);

            int? idLogTipo = null;
            int? idBairro = null;
            if (!string.IsNullOrEmpty(ddlCadIdTipoLog.SelectedValue) && !ddlCadIdTipoLog.SelectedValue.Equals("-1"))
                idLogTipo = Convert.ToInt32(ddlCadIdTipoLog.SelectedValue);

            if (!string.IsNullOrEmpty(ddlCadBairro.SelectedValue) && !ddlCadBairro.SelectedValue.Equals("-1"))
                idBairro = Convert.ToInt32(ddlCadBairro.SelectedValue);

            if (idBairro != null && idLogTipo != null)
                idLogradouroCadVOs.AddRange(AlfDAO.getLogradouros(null, idBairro, idLogTipo, null, null));

            Util.CarregarCombo(this.ddlCadIdLogradouro, idLogradouroCadVOs);
        }

        protected void CarregaLogradourox(string cep)
        {
            List<LogradouroVO> idLogradouroCadVOs = new List<LogradouroVO>();

            LogradouroVO idLogradouroCadVO = LogradouroVO.CreateVO();
            idLogradouroCadVO.idLogradouro = -1;
            idLogradouroCadVO.logradouro = "";
            idLogradouroCadVOs.Add(idLogradouroCadVO);

            if (cep != String.Empty)
            {
                idLogradouroCadVOs.AddRange(AlfDAO.getLogradouros(null, null, null, null, cep));
                if (idLogradouroCadVOs.Count < 2)
                {
                    Util.ExibeAlert(this, "CEP não Encontado");
                    return;
                }
            }

            Util.CarregarCombo(this.ddlCadIdLogradouro, idLogradouroCadVOs);
        }

        protected void ddlCadIdLogradouro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!ddlCadIdLogradouro.SelectedValue.Equals("-1") && !ddlCadIdLogradouro.SelectedValue.Equals(""))
            {
                LogradouroVO lVO = AlfDAO.getLogradouro(int.Parse(ddlCadIdLogradouro.SelectedValue));
                //txtCadCep.Text = lVO.cep;
                ddlCadIdTipoLog.SelectedValue = Convert.ToString(lVO.idLogTipo);
            }
            else
            {
                //this.txtCadCep.Text = "";
            }
        }

        protected void buscaLogradouro(int id)
        {
            LogradouroVO idLogradouro = AlfDAO.getLogradouro(id);
            idLogradouro.idBairroVO = AlfDAO.getBairro(idLogradouro.idBairro);
            idLogradouro.idBairroVO.idCidadeVO = AlfDAO.getCidade(idLogradouro.idBairroVO.idCidade);
            idLogradouro.idBairroVO.idCidadeVO.idEstadoVO = AlfDAO.getEstado(idLogradouro.idBairroVO.idCidadeVO.idEstado);


            ddlCadEstado.SelectedValue = Convert.ToString(idLogradouro.idBairroVO.idCidadeVO.idEstadoVO.idEstado);
            ddlCadEstado_SelectedIndexChanged(null, null);
            ddlCadCidade.SelectedValue = Convert.ToString(idLogradouro.idBairroVO.idCidadeVO.idCidade);
            ddlCadCidade_SelectedIndexChanged(null, null);
            ddlCadBairro.SelectedValue = Convert.ToString(idLogradouro.idBairroVO.idBairro);
            ddlCadBairro_SelectedIndexChanged(null, null);


            ddlCadIdTipoLog.SelectedValue = Convert.ToString(idLogradouro.idLogTipo);
            ddlCadIdTipoLog_SelectedIndexChanged(null, null);
            ddlCadIdLogradouro.SelectedValue = Convert.ToString(idLogradouro.idLogradouro);
            //txtCadCep.Text = idLogradouro.cep;

        }
    }
}
